﻿//==========================================================
//Đã sửa bởi tranninh_86_yb@yahoo.com ngày 26/06/2013
//==========================================================

using System;
using System.Data;
using DevExpress.XtraReports.UI;
using System.Data.SqlClient;
using prjKQXS_DLL;

namespace prjKQXS_Report
{
    public partial class rptMauTC01A : DevExpress.XtraReports.UI.XtraReport
    {
        Report_DAL report_dal = new Report_DAL();

        int CapBac;
        DateTime TuNgay;
        DateTime DenNgay;
        int mode;

        public rptMauTC01A(int cap, DateTime TuNgay, DateTime DenNgay, int mode)
        {
            InitializeComponent();

            this.CapBac = cap;
            this.TuNgay = TuNgay;
            this.DenNgay = DenNgay;
            this.mode = mode;

            dsReports1 = report_dal.reportDungChung(dsReports1);    //Nạp dữ liệu cho bảng rptDonVi trong dsReports1
            xuly();
        }

        private void xuly()
        {
            SqlConnection conn = new SqlConnection(BienTc.connString);
            conn.Open();

            /* Cap 1: T.DMCanBoID, CB.Ma_DT, CB.Ten_DT AS Ten_DaiLy, Noi_O, SoHD, MST, CB.Tien_Goc AS Goc, LX.NgayNopTC, 
             * T.Lai_xuat, Ky, LoaiKyHan, Ngay_ThanhLy, NgayRutTC (sắp xếp tăng dần theo DMCanBoID, Ky)
        
             * Cap 2: T.HopDongID, HD.Ma_DaiLy, Ten_DaiLy, Noi_O, HD.Ma_DT AS SoHD, MST, HD.So_Tien AS Goc, LX.NgayNopTC, 
             * T.Lai_xuat, LoaiKyHan, Ky, Ngay_ThanhLy, NgayRutTC (sắp xếp tăng dần theo HopDongID, Ky)
             */
            string sql = "proc_frmRptBangThoiDoi_rpt";

            SqlDataAdapter da = new SqlDataAdapter(sql, conn);
            da.SelectCommand.CommandType = CommandType.StoredProcedure;
            da.SelectCommand.Parameters.AddWithValue("@Cap", CapBac);
            da.SelectCommand.Parameters.AddWithValue("@bangTheoDoi", "TienKyQuy");
            da.SelectCommand.Parameters.AddWithValue("@TuNgay", this.TuNgay.Date);
            da.SelectCommand.Parameters.AddWithValue("@DenNgay", this.DenNgay.Date);
            da.SelectCommand.Parameters.AddWithValue("@isThanhLy", mode);  //Tham số giả
            DataTable rptDSDaiLyTheChap = new DataTable("rptDSDaiLyTheChap");
            da.Fill(rptDSDaiLyTheChap);


            //Điền Tu_ngay, Den_Ngay
            rptDSDaiLyTheChap.Columns.Add("Tu_ngay", Type.GetType("System.DateTime"));
            rptDSDaiLyTheChap.Columns.Add("Den_Ngay", Type.GetType("System.DateTime"));
            if (rptDSDaiLyTheChap.Rows.Count > 0)
            {
                //dt sau chứa các kỳ lãi đã gửi của đại lý có mã là maCBorDL, gồm các cột Tien, Ky, MaCB, LoaiKyHan, Tu_ngay, Den_Ngay, Lai_xuat
                //(sắp xếp tăng dần theo Ky)
                DataTable dt = clsCommon.loadData_TienKyQuy(CapBac, rptDSDaiLyTheChap);
                for (int i = 0; i < dt.Rows.Count; i++)
                {
                    rptDSDaiLyTheChap.Rows[i]["Tu_ngay"] = dt.Rows[i]["Tu_ngay"];
                    rptDSDaiLyTheChap.Rows[i]["Den_Ngay"] = dt.Rows[i]["Den_Ngay"];
                }
            }


            //======================================================
            //(Mã này tựa bên frmTLChiTiet.loadData())
            //Lặp qua các dòng của rptDSDaiLyTheChap
            //- Lấy ra bảng lãi chi tiết (dựa vào Ma_DT)
            //- Đồng thời kiểm tra xem có phải kỳ đang xét không (dựa vào LoaiKyHan và TuNgay)              (đoạn này khác bên frmTLChiTiet)
            //  + Nếu đúng thì lấy thông tin sau đó chuyển qua bảng lãi chi tiết của trường hợp tiếp theo
            //======================================================

            if (rptDSDaiLyTheChap.Rows.Count > 0)
            {
                rptDSDaiLyTheChap.Columns.Add("Ngay_TinhLai", Type.GetType("System.DateTime"));
                rptDSDaiLyTheChap.Columns.Add("Tien_DauKy", Type.GetType("System.Decimal"));
                rptDSDaiLyTheChap.Columns.Add("Tien_Lai", Type.GetType("System.Decimal"));
                rptDSDaiLyTheChap.Columns.Add("Tien", Type.GetType("System.Decimal"));

                for (int n = 0; n < rptDSDaiLyTheChap.Rows.Count; n++)
                {
                    //Điền dữ liệu cho cột Ngay_TinhLai
                    rptDSDaiLyTheChap.Rows[n]["Ngay_TinhLai"] = clsCommon.generateNgayBDTL((DateTime)rptDSDaiLyTheChap.Rows[n]["NgayNopTC"]);

                    DateTime NgayTLy = new DateTime();
                    if (rptDSDaiLyTheChap.Rows[n]["Ngay_ThanhLy"] != DBNull.Value)
                        NgayTLy = (DateTime)rptDSDaiLyTheChap.Rows[n]["Ngay_ThanhLy"];
                    
                    DateTime NgayRutTC = new DateTime();
                    if (rptDSDaiLyTheChap.Rows[n]["NgayRutTC"] != DBNull.Value)
                        NgayRutTC = (DateTime)rptDSDaiLyTheChap.Rows[n]["NgayRutTC"];

                    int id;
                    if (CapBac == 1) id = (int)rptDSDaiLyTheChap.Rows[n]["DMCanBoID"];
                    else id = (int)rptDSDaiLyTheChap.Rows[n]["HopDongID"];
                    DataTable dt = clsCommon.loadDataSource_TLLX(CapBac, id);

                    int LoaiKyHan = Convert.ToInt32(rptDSDaiLyTheChap.Rows[n]["LoaiKyHan"]);
                    DateTime Tu_Ngay = (DateTime)rptDSDaiLyTheChap.Rows[n]["Tu_ngay"];
                    if (dt.Rows.Count > 0)
                    {
                        for (int i = 0; i < dt.Rows.Count; i++)
                        {
                            clsCommon.XyLyNguon(CapBac, id, NgayTLy, NgayRutTC, ref dt, i, mode);
                            
                            //
                            int loaikh = Convert.ToInt32(dt.Rows[i]["LoaiKyHan"]);
                            DateTime tungay = (DateTime)dt.Rows[i]["Tu_ngay"];
                            if (loaikh == LoaiKyHan && tungay.Date == Tu_Ngay.Date)
                            {
                                rptDSDaiLyTheChap.Rows[n]["Tien_DauKy"] = dt.Rows[i]["TienGocDauKy"];
                                rptDSDaiLyTheChap.Rows[n]["Tien_Lai"] = dt.Rows[i]["Tien_lai"];
                                rptDSDaiLyTheChap.Rows[n]["Tien"] = dt.Rows[i]["TienGocMoi"];

                                i = dt.Rows.Count;  //Gán i như thế này để kết thúc vòng for
                            }
                        }
                    }
                }
            }
            
            //Đặt lại tiêu đề cho báo cáo
            lblTitle.Text += CapBac.ToString();
            lblKhoangThoiGian.Text = "Từ ngày " + TuNgay.Day.ToString("00") + " tháng " + TuNgay.Month.ToString("00") + " năm " + TuNgay.Year + " đến ngày " +
                DenNgay.Day.ToString("00") + " tháng " + DenNgay.Month.ToString("00") + " năm " + DenNgay.Year;

            //Loại bỏ kỳ không nằm trong khoảng TuNgay - DenNgay
            for (int i = rptDSDaiLyTheChap.Rows.Count - 1; i >= 0; i--)
            {
                if (((DateTime)rptDSDaiLyTheChap.Rows[i]["Tu_ngay"]).Date < this.TuNgay.Date
                    || ((DateTime)rptDSDaiLyTheChap.Rows[i]["Den_Ngay"]).Date > this.DenNgay.Date)
                    rptDSDaiLyTheChap.Rows[i].Delete();
            }

            dsReports1.Tables.Remove("rptDSDaiLyTheChap");
            dsReports1.Tables.Add(rptDSDaiLyTheChap);
        }

        int stt = 0;
        private void Detail_BeforePrint(object sender, System.Drawing.Printing.PrintEventArgs e)
        {
            stt++;
            lblSTT.Text = stt.ToString();
        }

    }
}
